Set the working directory to H:/Projects/11000/11187/TS/Task 3.
Load the Scott_County_CR78_trips_78.csv file
CR_78 <- read.csv("H:/Projects/11000/11187/TS/Task 3/CR 78/scott_county_CR78_trips.csv",stringsAsFactors = FALSE)%>%
mutate(Date=ymd_hms(start_date_central,tz="US/Central"))
Date in ISO8601 format; converting timezone from UTC to "US/Central".
Link_dist_78 <- readxl::read_xlsx('H:/Projects/11000/11187/TS/Task 3/CR 78/scott_county_CR78_trips.xlsx',sheet = 'LinkDistances')
CR_42 <- read.csv("H:/Projects/11000/11187/TS/Task 3/CR 42/scott_county_CR42_trips.csv",stringsAsFactors = FALSE)%>%
mutate(Date=ymd_hms(start_date_central,tz="US/Central"))
Date in ISO8601 format; converting timezone from UTC to "US/Central".
Link_dist_42 <- readxl::read_xlsx('H:/Projects/11000/11187/TS/Task 3/CR 42/scott_county_CR42_trips.xlsx',sheet = 'LinkDistances')
The dimensions of the CR_78 dataset are 2063 rows and 20 columns. The dimensions of the CR_42 dataset are 994 rows and 20 columns.
Two combinations of links were used for analysis. The segments were loaded from the File Geodatabase on the H Drive project folder, rfgb.
The segment for CR_42 included 18 links. The segment for CR_42 included 20 links.
Scott County
CR_78
The data was collected between 2015-08-31 and 2015-11-30.
tripflag_summary_42 %>%
mutate(in_model = Total_Dist<40)%>%
ggplot(aes(x=in_model))+
geom_bar(stat = 'count')+
labs(title='Trips less than 40 miles',x=element_blank(),y='Total Count')+
scale_y_continuous(breaks = seq(0,900,50))+
theme(plot.title = element_text(hjust = 0.5))

gg <- ggplot(tripflag_summary_42[tripflag_summary_42$Total_Dist<40,])+
geom_histogram(aes(x=Total_Dist),color='black',fill='white',binwidth = 2.5)+
labs(title="Total Trip Distance histogram plot",x="Total Distance (miles)", y = "Count")
ggplotly(gg)
Start Locations:
End Locations:
CR_42
The data was collected between 2015-08-31 and 2015-11-30.
tripflag_summary_78 %>%
mutate(in_model = Total_Dist<40)%>%
ggplot(aes(x=in_model))+
geom_bar(stat = 'count')+
labs(title='Trips less than 40 miles',x=element_blank(),y='Total Count')+
scale_y_continuous(breaks = seq(0,1500,50))+
theme(plot.title = element_text(hjust = 0.5))

gg <- ggplot(tripflag_summary_78[tripflag_summary_78$Total_Dist<40,])+
geom_histogram(aes(x=Total_Dist),color='black',fill='white',binwidth = 2.5)+
labs(title="Total Trip Distance histogram plot",x="Total Distance (miles)", y = "Count")
ggplotly(gg)
Start Locations:
End Locations:
LS0tDQp0aXRsZTogIlRyaXAgRnJlcSBBbmFseXNpcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyLGVjaG89RkFMU0UsaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoZm9yZWNhc3QpDQpsaWJyYXJ5KGxlYWZsZXQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkocmdkYWwpDQpvcHRpb25zKGtuaXRyLnRhYmxlLmZvcm1hdCA9ICJodG1sIikgDQpgYGANCg0KDQpTZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIEg6L1Byb2plY3RzLzExMDAwLzExMTg3L1RTL1Rhc2sgMy4NCg0KYGBge3IgJ3NldHVwJyxpbmNsdWRlPUZBTFNFfQ0KcmVxdWlyZShrbml0cikNCm9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAiSDovUHJvamVjdHMvMTEwMDAvMTExODcvVFMvVGFzayAzL1IiKQ0KZGlyKCkNCmBgYA0KDQoNCkxvYWQgdGhlIFNjb3R0X0NvdW50eV9DUjc4X3RyaXBzXzc4LmNzdiBmaWxlDQoNCmBgYHtyfQ0KDQoNCkNSXzc4IDwtIHJlYWQuY3N2KCJIOi9Qcm9qZWN0cy8xMTAwMC8xMTE4Ny9UUy9UYXNrIDMvQ1IgNzgvc2NvdHRfY291bnR5X0NSNzhfdHJpcHMuY3N2IixzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpJT4lDQogIG11dGF0ZShEYXRlPXltZF9obXMoc3RhcnRfZGF0ZV9jZW50cmFsLHR6PSJVUy9DZW50cmFsIikpDQoNCkxpbmtfZGlzdF83OCA8LSAgcmVhZHhsOjpyZWFkX3hsc3goJ0g6L1Byb2plY3RzLzExMDAwLzExMTg3L1RTL1Rhc2sgMy9DUiA3OC9zY290dF9jb3VudHlfQ1I3OF90cmlwcy54bHN4JyxzaGVldCA9ICdMaW5rRGlzdGFuY2VzJykNCg0KQ1JfNDIgPC0gcmVhZC5jc3YoIkg6L1Byb2plY3RzLzExMDAwLzExMTg3L1RTL1Rhc2sgMy9DUiA0Mi9zY290dF9jb3VudHlfQ1I0Ml90cmlwcy5jc3YiLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSklPiUNCiAgbXV0YXRlKERhdGU9eW1kX2htcyhzdGFydF9kYXRlX2NlbnRyYWwsdHo9IlVTL0NlbnRyYWwiKSkNCg0KTGlua19kaXN0XzQyIDwtICByZWFkeGw6OnJlYWRfeGxzeCgnSDovUHJvamVjdHMvMTEwMDAvMTExODcvVFMvVGFzayAzL0NSIDQyL3Njb3R0X2NvdW50eV9DUjQyX3RyaXBzLnhsc3gnLHNoZWV0ID0gJ0xpbmtEaXN0YW5jZXMnKQ0KDQpgYGANCg0KVGhlIGRpbWVuc2lvbnMgb2YgdGhlIENSXzc4IGRhdGFzZXQgYXJlIGByIHBhc3RlKGRpbShDUl83OClbMV0sJ3Jvd3MgYW5kJyxkaW0oQ1JfNzgpWzJdLCdjb2x1bW5zJylgLg0KVGhlIGRpbWVuc2lvbnMgb2YgdGhlIENSXzQyIGRhdGFzZXQgYXJlIGByIHBhc3RlKGRpbShDUl80MilbMV0sJ3Jvd3MgYW5kJyxkaW0oQ1JfNDIpWzJdLCdjb2x1bW5zJylgLg0KDQoNCmBgYHtyLGVjaG89RkFMU0UsaW5jbHVkZT1GQUxTRX0NCg0KZmdkYiA8LSAiSDovUHJvamVjdHMvMTEwMDAvMTExODcvVFMvVGFzayAzL1Njb3R0IENvdW50eS5nZGIiDQpDUl83OF9zZWcgPC0gcmVhZE9HUihkc249ZmdkYixsYXllcj0iQ1JfNzhfc2VnIikNCkNSXzQyX3NlZyA8LSByZWFkT0dSKGRzbj1mZ2RiLGxheWVyPSJDUl80Ml9zZWciKQ0KDQpgYGANCg0KVHdvIGNvbWJpbmF0aW9ucyBvZiBsaW5rcyB3ZXJlIHVzZWQgZm9yIGFuYWx5c2lzLiBUaGUgc2VnbWVudHMgd2VyZSBsb2FkZWQgZnJvbSB0aGUgRmlsZSBHZW9kYXRhYmFzZSBvbiB0aGUgSCBEcml2ZSBwcm9qZWN0IGZvbGRlciwgYHJmZ2JgLg0KDQpUaGUgc2VnbWVudCBmb3IgQ1JfNDIgaW5jbHVkZWQgYHIgZGltKENSXzc4X3NlZylbMV1gIGxpbmtzLg0KVGhlIHNlZ21lbnQgZm9yIENSXzQyIGluY2x1ZGVkIGByIGRpbShDUl80Ml9zZWcpWzFdYCBsaW5rcy4NCg0KIVtDUl83OCBhbmQgQ1JfNDIgQW5hbHlzaXMgTGlua3NdKFNlZ21lbnRfT3ZlcnZpZXcucG5nKQ0KDQpgYGB7ciwgZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLGluY2x1ZGU9RkFMU0V9DQpDUl83OF94IDwtICBDUl83OCAlPiUNCiAgc2VsZWN0KC1wYXRoLGV2ZXJ5dGhpbmcoKSklPiUNCiAgc2VwYXJhdGUocGF0aCxyZW1vdmUgPSBGQUxTRSxzZXA9JyMnLGludG8gPSBwYXN0ZSgnVicsYygxOjEwMDApLHNlcCA9ICcnKSkNCg0Kc2l6ZSA8LSBzYXBwbHkoQ1JfNzhfeCxmdW5jdGlvbih4KWFsbChpcy5uYSh4KSkpDQptaW4od2hpY2goc2l6ZT09VFJVRSkpDQpjb2xuYW1lcyhDUl83OF94KVttaW4od2hpY2goc2l6ZT09VFJVRSkpXQ0KDQpDUl80Ml94IDwtICBtdXRhdGUoQ1JfNDIsRGF0ZT15bWRfaG1zKHN0YXJ0X2RhdGVfY2VudHJhbCx0ej0iVVMvQ2VudHJhbCIpKSU+JQ0KICBzZWxlY3QoLXBhdGgsZXZlcnl0aGluZygpKSU+JQ0KICBzZXBhcmF0ZShwYXRoLHJlbW92ZSA9IEZBTFNFLHNlcD0nIycsaW50byA9IHBhc3RlKCdWJyxjKDE6MTAwMCksc2VwID0gJycpKQ0KDQpzaXplIDwtIHNhcHBseShDUl80Ml94LGZ1bmN0aW9uKHgpYWxsKGlzLm5hKHgpKSkNCm1pbih3aGljaChzaXplPT1UUlVFKSkNCmNvbG5hbWVzKENSXzQyX3gpW21pbih3aGljaChzaXplPT1UUlVFKSldDQpgYGANCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFfQ0KDQpjb2xfNzggPC0gY29sbmFtZXMoQ1JfNzhfeCklaW4lIHBhc3RlKCdWJyxjKDE6Mjk3KSxzZXA9JycpDQoNCnRyaXBfY29tcG9uZW50c183OCA8LSAgbWVsdChDUl83OF94LGlkLnZhcnMgPSBjKCd0cmlwX2lkJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydF9sYXRpdHVkZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRfbG9uZ2l0dWRlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmRfbGF0aXR1ZGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZF9sb25naXR1ZGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RhdGUnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUudmFycyA9IGNvbG5hbWVzKENSXzc4X3gpW2NvbF83OF0sDQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5uYW1lID0gJ0ErQicsDQogICAgICAgICAgICAgICAgICAgICAgICBzZXA9JycpIA0KDQp0cmlwX2NvbXBvbmVudHNfNzggPC0gICBtZXJnZSh0cmlwX2NvbXBvbmVudHNfNzgsTGlua19kaXN0Xzc4LGJ5PSdBK0InKSAlPiUgYXJyYW5nZSh0cmlwX2lkKQ0KDQojIyN0cmlwc183OCBjYW4gZ28gdGhyb3VnaCBvdXIgc2VnbWVudA0KIyMjdHJpcHNfNzggPC0gZmlsdGVyKHRyaXBfY29tcG9uZW50c183OCx0cmlwX2NvbXBvbmVudHNfNzgkYEErQmAgJWluJSBDUl83OF9zZWckTGluaykNCiMjIyN0cmlwX2lkcyA8LSB0cmlwc183OFshZHVwbGljYXRlZCh0cmlwc183OCR0cmlwX2lkKSxdDQoNCmNvbF80MiA8LSBjb2xuYW1lcyhDUl80Ml94KSVpbiUgcGFzdGUoJ1YnLGMoMToyNzApLHNlcD0nJykNCg0KdHJpcF9jb21wb25lbnRzXzQyIDwtICBtZWx0KENSXzQyX3gsaWQudmFycyA9IGMoJ3RyaXBfaWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0X2xhdGl0dWRlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydF9sb25naXR1ZGUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZF9sYXRpdHVkZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5kX2xvbmdpdHVkZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGF0ZScpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZS52YXJzID0gY29sbmFtZXMoQ1JfNDJfeClbY29sXzQyXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm5hbWUgPSAnQStCJywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcD0nJykgDQoNCnRyaXBfY29tcG9uZW50c180MiA8LSAgIG1lcmdlKHRyaXBfY29tcG9uZW50c180MixMaW5rX2Rpc3RfNDIsYnk9J0ErQicpICU+JSBhcnJhbmdlKHRyaXBfaWQpDQoNCnJtKENSXzc4X3gsQ1JfNDJfeCkNCg0KYGBgDQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0NCiMjI2ZpbmQgdGhlIHRvdGFsIGRpc3RhbmNlIGZvciBlYWNoIFRyaXANCnRyaXBmbGFnX3N1bW1hcnlfNzggPC0gdHJpcF9jb21wb25lbnRzXzc4ICU+JQ0KICBncm91cF9ieSh0cmlwX2lkKSU+JQ0KICBzdW1tYXJpc2UoVG90YWxfRGlzdCA9IHN1bShESVNUQU5DRSkpJT4lDQogIGFycmFuZ2UoZGVzYyhUb3RhbF9EaXN0KSkNCg0KdHJpcGZsYWdfc3VtbWFyeV83OCA8LSBtZXJnZSh0cmlwZmxhZ19zdW1tYXJ5Xzc4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUl83OFssYygidHJpcF9pZCIsIkRhdGUiLCJzdGFydF9sYXRpdHVkZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydF9sb25naXR1ZGUiLCJlbmRfbGF0aXR1ZGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kX2xvbmdpdHVkZSIpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnk9J3RyaXBfaWQnKQ0KDQojIyNkYXRhdGFibGUodHJpcGZsYWdfc3VtbWFyeV83OCxmaWx0ZXI9J3RvcCcpDQoNCiMjI2ZpbmQgdGhlIHRvdGFsIGRpc3RhbmNlIGZvciBlYWNoIFRyaXANCnRyaXBmbGFnX3N1bW1hcnlfNDIgPC0gdHJpcF9jb21wb25lbnRzXzQyICU+JQ0KICBncm91cF9ieSh0cmlwX2lkKSU+JQ0KICBzdW1tYXJpc2UoVG90YWxfRGlzdCA9IHN1bShESVNUQU5DRSkpJT4lDQogIGFycmFuZ2UoZGVzYyhUb3RhbF9EaXN0KSkNCg0KdHJpcGZsYWdfc3VtbWFyeV80MiA8LSBtZXJnZSh0cmlwZmxhZ19zdW1tYXJ5XzQyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUl80MlssYygidHJpcF9pZCIsIkRhdGUiLCJzdGFydF9sYXRpdHVkZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGFydF9sb25naXR1ZGUiLCJlbmRfbGF0aXR1ZGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kX2xvbmdpdHVkZSIpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnk9J3RyaXBfaWQnKQ0KDQojIyNkYXRhdGFibGUodHJpcGZsYWdfc3VtbWFyeV80MixmaWx0ZXI9J3RvcCcpDQoNCmBgYA0KDQoNCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRX0NCiMjI2F0dGFjaGVkIHRvdGFsIHRyaXAgZGlzdGFuY2UgdG8gZWFjaCBsaW5rDQojIyNmaWx0ZXIgdGhlIHRyaXBzIGZvciBvbmx5IG91ciB0cmlwcyBvZiBpbnRlcmVzdCBpbiBzZWdtZW50IDQyDQp0cmlwX2NvbXBfbWVyZ2VfNzggPC0gbWVyZ2UodHJpcF9jb21wb25lbnRzXzc4LHRyaXBmbGFnX3N1bW1hcnlfNzgsDQogICAgICAgICAgICAgICAgICAgICAgICAgYnkueD0ndHJpcF9pZCcsYnkueT0ndHJpcF9pZCcsYWxsLng9VFJVRSklPiUNCiAgYXJyYW5nZShkZXNjKFRvdGFsX0Rpc3QpKSU+JQ0KICBmaWx0ZXIoYEErQmAgJWluJSBDUl83OF9zZWckTGluayklPiUNCiAgZmlsdGVyKFRvdGFsX0Rpc3Q8NDApDQoNCiMjI3N1bW1hcmlzZSB0aGUgdHJpcCBkaXN0YW5jZXMgYnkgb3VyIGxpbmtzIA0KIyMjdGhpcyBzdW1tYXJ5IGlzIGZvciB0cmlwcyBsZXNzIHRoYW4gNTAgbWlsZXMuDQojIyN0cmlwIHRvdGFsIGRpc3RhbmNlIGlzIG5vdCBhY2N1cmF0ZSBvdXRzaWRlIG9mIHRoaXMgcmFuZ2UuIA0KbGlua19kZXRhaWxzXzc4IDwtIHRyaXBfY29tcF9tZXJnZV83OCAlPiUgZ3JvdXBfYnkoYEErQmApICU+JQ0KICBzdW1tYXJpc2UoTWVhbiA9IG1lYW4oVG90YWxfRGlzdCksDQogICAgICAgICAgICBNYXggPSBtYXgoVG90YWxfRGlzdCksDQogICAgICAgICAgICBNaW4gPSBtaW4oVG90YWxfRGlzdCksDQogICAgICAgICAgICBTdGQgPSBzZChUb3RhbF9EaXN0KSkNCg0KIyMjZGF0YXRhYmxlKHRyaXBzXzc4LGZpbHRlcj0ndG9wJykNCg0KIyMjYXR0YWNoZWQgdG90YWwgdHJpcCBkaXN0YW5jZSB0byBlYWNoIGxpbmsNCiMjI2ZpbHRlciB0aGUgdHJpcHMgZm9yIG9ubHkgb3VyIHRyaXBzIG9mIGludGVyZXN0IGluIHNlZ21lbnQgNDINCnRyaXBfY29tcF9tZXJnZV80MiA8LSBtZXJnZSh0cmlwX2NvbXBvbmVudHNfNDIsdHJpcGZsYWdfc3VtbWFyeV80MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBieS54PSd0cmlwX2lkJyxieS55PSd0cmlwX2lkJyxhbGwueD1UUlVFKSU+JQ0KICBhcnJhbmdlKGRlc2MoVG90YWxfRGlzdCkpJT4lDQogIGZpbHRlcihgQStCYCAlaW4lIENSXzQyX3NlZyRMaW5rKSU+JQ0KICBmaWx0ZXIoVG90YWxfRGlzdDw0MCkNCg0KIyMjc3VtbWFyaXNlIHRoZSB0cmlwIGRpc3RhbmNlcyBieSBvdXIgbGlua3MgDQojIyN0aGlzIHN1bW1hcnkgaXMgZm9yIHRyaXBzIGxlc3MgdGhhbiA1MCBtaWxlcy4NCiMjI3RyaXAgdG90YWwgZGlzdGFuY2UgaXMgbm90IGFjY3VyYXRlIG91dHNpZGUgb2YgdGhpcyByYW5nZS4gDQpsaW5rX2RldGFpbHNfNDIgPC0gdHJpcF9jb21wX21lcmdlXzQyICU+JSBncm91cF9ieShgQStCYCkgJT4lDQogIHN1bW1hcmlzZShNZWFuID0gbWVhbihUb3RhbF9EaXN0KSwNCiAgICAgICAgICAgIE1heCA9IG1heChUb3RhbF9EaXN0KSwNCiAgICAgICAgICAgIE1pbiA9IG1pbihUb3RhbF9EaXN0KSwNCiAgICAgICAgICAgIFN0ZCA9IHNkKFRvdGFsX0Rpc3QpKQ0KDQoNCiMjI2RhdGF0YWJsZSh0cmlwc180MixmaWx0ZXI9J3RvcCcpDQoNCg0KYGBgDQoNCg0KIyMgU2NvdHQgQ291bnR5IHsudGFic2V0IC50YWJzZXQtZmFkZX0NCg0KIyMjIENSXzc4DQoNClRoZSBkYXRhIHdhcyBjb2xsZWN0ZWQgYmV0d2VlbiBgciBmb3JtYXQobWluKENSXzc4JERhdGUpLCclWS0lbS0lZCcpYCBhbmQgYHIgZm9ybWF0KG1heChDUl83OCREYXRlKSwnJVktJW0tJWQnKWAuDQoNCmBgYHtyLGVjaG89RkFMU0UsZmlnLmhlaWdodD01fQ0KDQpDUl83OF9wbG90IDwtIG1lcmdlKENSXzc4X3NlZyxsaW5rX2RldGFpbHNfNzgsYnkueD0nTGluaycsYnkueT0nQStCJykNCg0KQ1JfNzhfcGxvdCRsYWJlbCA8LSBwYXN0ZShDUl83OF9wbG90JEFCLCdNZWFuIERpc3Q6Jyxhcy5jaGFyYWN0ZXIocm91bmQoQ1JfNzhfcGxvdCRNZWFuLDIpKSkNCg0KbGVhZmxldChkYXRhPUNSXzc4X3Bsb3Qsd2lkdGggPSAnMTAwJScpICU+JQ0KICBzZXRWaWV3KGxuZyA9IC05My41NTA4MjUsIGxhdCA9ICA0NC43NzE2MTQsIHpvb20gPSAxMyklPiUNCiAgYWRkUG9seWxpbmVzKGhpZ2hsaWdodE9wdGlvbnMgPSBoaWdobGlnaHRPcHRpb25zKGNvbG9yID0gIndoaXRlIiwgd2VpZ2h0ID0gMiwNCiAgICAgIGJyaW5nVG9Gcm9udCA9IFRSVUUpLGxhYmVsPX5sYWJlbCkgJT4lIA0KICBhZGRQcm92aWRlclRpbGVzKHByb3ZpZGVycyRPcGVuU3RyZWV0TWFwKQ0KDQpgYGANCg0KYGBge3J9DQoNCnRyaXBmbGFnX3N1bW1hcnlfNDIgJT4lIA0KICBtdXRhdGUoaW5fbW9kZWwgPSBUb3RhbF9EaXN0PDQwKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9aW5fbW9kZWwpKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICdjb3VudCcpKw0KICBsYWJzKHRpdGxlPSdUcmlwcyBsZXNzIHRoYW4gNDAgbWlsZXMnLHg9ZWxlbWVudF9ibGFuaygpLHk9J1RvdGFsIENvdW50JykrDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCw5MDAsNTApKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KYGBge3J9DQpnZyA8LSAgZ2dwbG90KHRyaXBmbGFnX3N1bW1hcnlfNDJbdHJpcGZsYWdfc3VtbWFyeV80MiRUb3RhbF9EaXN0PDQwLF0pKw0KICBnZW9tX2hpc3RvZ3JhbShhZXMoeD1Ub3RhbF9EaXN0KSxjb2xvcj0nYmxhY2snLGZpbGw9J3doaXRlJyxiaW53aWR0aCA9IDIuNSkrDQogIGxhYnModGl0bGU9IlRvdGFsIFRyaXAgRGlzdGFuY2UgaGlzdG9ncmFtIHBsb3QiLHg9IlRvdGFsIERpc3RhbmNlIChtaWxlcykiLCB5ID0gIkNvdW50IikNCiAgDQpnZ3Bsb3RseShnZykNCg0KYGBgDQoNCg0KU3RhcnQgTG9jYXRpb25zOg0KYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTV9DQppY29uX3N0YXJ0IDwtIG1ha2VJY29uKCdpY29uX3N0YXJ0LnBuZycsaWNvbldpZHRoID0gMTAsIGljb25IZWlnaHQgPSA4KQ0KZGF0YSA8LSB0cmlwZmxhZ19zdW1tYXJ5Xzc4ICU+JWZpbHRlcihUb3RhbF9EaXN0PDQwKQ0KDQpsaXN0X3JhZGl1cyA8LSBsaXN0KDE2MDkuMzQqNSwxNjA5LjM0KjEwLDE2MDkuMzQqMjAsMTYwOS4zNCo0MCkNCmxpc3RfbGFiZWwgPC0gbGlzdCgnNSBtaWxlcycsJzEwIG1pbGVzJywnMjAgbWlsZXMnLCc0MCBtaWxlcycpDQpgYGANCg0KYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTV9DQoNCmxlYWZsZXQoZGF0YT1kYXRhLHdpZHRoID0gJzEwMCUnKSAlPiUNCiAgc2V0VmlldyhsbmcgPSAtOTMuNTA1MDgsIGxhdCA9ICA0NC43NTMwMTksIHpvb20gPSAxMCklPiUNCiAgYWRkVGlsZXMoKSAlPiUgDQogIGFkZE1hcmtlcnMofnN0YXJ0X2xvbmdpdHVkZSx+c3RhcnRfbGF0aXR1ZGUsaWNvbiA9IGljb25fc3RhcnQsbGFiZWw9fnRyaXBfaWQpICU+JQ0KICBhZGRDaXJjbGVzKGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSxyYWRpdXMgPSBsaXN0X3JhZGl1cywNCiAgICAgICAgICAgICBmaWxsQ29sb3IgPSAnbm9uZScsbGFiZWwgPWxpc3RfbGFiZWwpJT4lDQogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJE9wZW5TdHJlZXRNYXApDQoNCmBgYA0KDQoNCkVuZCBMb2NhdGlvbnM6DQoNCmBgYHtyLGVjaG89RkFMU0UsZmlnLmhlaWdodD01fQ0KDQoNCmxlYWZsZXQoZGF0YT1kYXRhLHdpZHRoID0gJzEwMCUnKSAlPiUNCiAgc2V0VmlldyhsbmcgPSAtOTMuNTA1MDgsIGxhdCA9ICA0NC43NTMwMTksIHpvb20gPSAxMCklPiUNCiAgYWRkVGlsZXMoKSAlPiUgDQogIGFkZE1hcmtlcnMofmVuZF9sb25naXR1ZGUsfmVuZF9sYXRpdHVkZSxpY29uID0gaWNvbl9lbmQsbGFiZWw9fnRyaXBfaWQpICU+JQ0KICBhZGRDaXJjbGVzKGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSxyYWRpdXMgPSBsaXN0X3JhZGl1cywNCiAgICAgICAgICAgICBmaWxsQ29sb3IgPSAnbm9uZScsbGFiZWwgPWxpc3RfbGFiZWwpJT4lDQogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJE9wZW5TdHJlZXRNYXApDQoNCmBgYA0KDQoNCg0KIyMjIENSXzQyDQoNCg0KVGhlIGRhdGEgd2FzIGNvbGxlY3RlZCBiZXR3ZWVuIGByIGZvcm1hdChtaW4oQ1JfNzgkRGF0ZSksJyVZLSVtLSVkJylgIGFuZCBgciBmb3JtYXQobWF4KENSXzc4JERhdGUpLCclWS0lbS0lZCcpYC4NCg0KYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTV9DQoNCkNSXzQyX3Bsb3QgPC0gbWVyZ2UoQ1JfNDJfc2VnLGxpbmtfZGV0YWlsc180MixieS54PSdMaW5rJyxieS55PSdBK0InKQ0KDQpDUl80Ml9wbG90JGxhYmVsIDwtIHBhc3RlKENSXzQyX3Bsb3QkQUIsJ01lYW4gRGlzdDonLGFzLmNoYXJhY3Rlcihyb3VuZChDUl80Ml9wbG90JE1lYW4sMikpKQ0KDQpsZWFmbGV0KGRhdGE9Q1JfNDJfcGxvdCx3aWR0aCA9ICcxMDAlJykgJT4lDQogIHNldFZpZXcobG5nID0gLTkzLjU1MDgyNSwgbGF0ID0gIDQ0Ljc3MTYxNCwgem9vbSA9IDEzKSU+JQ0KICBhZGRQb2x5bGluZXMoaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMoY29sb3IgPSAid2hpdGUiLCB3ZWlnaHQgPSAyLA0KICAgICAgYnJpbmdUb0Zyb250ID0gVFJVRSksbGFiZWw9fmxhYmVsKSAlPiUgDQogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJE9wZW5TdHJlZXRNYXApDQoNCmBgYA0KDQpgYGB7cn0NCg0KdHJpcGZsYWdfc3VtbWFyeV83OCAlPiUgDQogIG11dGF0ZShpbl9tb2RlbCA9IFRvdGFsX0Rpc3Q8NDApJT4lDQogIGdncGxvdChhZXMoeD1pbl9tb2RlbCkpKw0KICBnZW9tX2JhcihzdGF0ID0gJ2NvdW50JykrDQogIGxhYnModGl0bGU9J1RyaXBzIGxlc3MgdGhhbiA0MCBtaWxlcycseD1lbGVtZW50X2JsYW5rKCkseT0nVG90YWwgQ291bnQnKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDE1MDAsNTApKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpDQpgYGANCg0KDQpgYGB7cn0NCmdnIDwtICBnZ3Bsb3QodHJpcGZsYWdfc3VtbWFyeV83OFt0cmlwZmxhZ19zdW1tYXJ5Xzc4JFRvdGFsX0Rpc3Q8NDAsXSkrDQogIGdlb21faGlzdG9ncmFtKGFlcyh4PVRvdGFsX0Rpc3QpLGNvbG9yPSdibGFjaycsZmlsbD0nd2hpdGUnLGJpbndpZHRoID0gMi41KSsNCiAgbGFicyh0aXRsZT0iVG90YWwgVHJpcCBEaXN0YW5jZSBoaXN0b2dyYW0gcGxvdCIseD0iVG90YWwgRGlzdGFuY2UgKG1pbGVzKSIsIHkgPSAiQ291bnQiKQ0KICANCmdncGxvdGx5KGdnKQ0KDQpgYGANCg0KU3RhcnQgTG9jYXRpb25zOg0KYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTV9DQppY29uX3N0YXJ0IDwtIG1ha2VJY29uKCdpY29uX3N0YXJ0LnBuZycsaWNvbldpZHRoID0gMTAsIGljb25IZWlnaHQgPSA4KQ0KZGF0YSA8LSB0cmlwZmxhZ19zdW1tYXJ5XzQyJT4lZmlsdGVyKFRvdGFsX0Rpc3Q8NDApDQoNCmxpc3RfcmFkaXVzIDwtIGxpc3QoMTYwOS4zNCo1LDE2MDkuMzQqMTAsMTYwOS4zNCoyMCwxNjA5LjM0KjQwKQ0KbGlzdF9sYWJlbCA8LSBsaXN0KCc1IG1pbGVzJywnMTAgbWlsZXMnLCcyMCBtaWxlcycsJzQwIG1pbGVzJykNCmBgYA0KDQpgYGB7cixlY2hvPUZBTFNFLGZpZy5oZWlnaHQ9NX0NCg0KbGVhZmxldChkYXRhPWRhdGEsd2lkdGggPSAnMTAwJScpICU+JQ0KICBzZXRWaWV3KGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSwgem9vbSA9IDEwKSU+JQ0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkTWFya2Vycyh+c3RhcnRfbG9uZ2l0dWRlLH5zdGFydF9sYXRpdHVkZSxpY29uID0gaWNvbl9zdGFydCxsYWJlbD1+dHJpcF9pZCkgJT4lDQogIGFkZENpcmNsZXMobG5nID0gLTkzLjUwNTA4LCBsYXQgPSAgNDQuNzUzMDE5LHJhZGl1cyA9IGxpc3RfcmFkaXVzLA0KICAgICAgICAgICAgIGZpbGxDb2xvciA9ICdub25lJyxsYWJlbCA9bGlzdF9sYWJlbCklPiUNCiAgYWRkUHJvdmlkZXJUaWxlcyhwcm92aWRlcnMkT3BlblN0cmVldE1hcCkNCg0KYGBgDQoNCg0KRW5kIExvY2F0aW9uczoNCg0KYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTV9DQoNCmxlYWZsZXQoZGF0YT1kYXRhLHdpZHRoID0gJzEwMCUnKSAlPiUNCiAgc2V0VmlldyhsbmcgPSAtOTMuNTA1MDgsIGxhdCA9ICA0NC43NTMwMTksIHpvb20gPSAxMCklPiUNCiAgYWRkVGlsZXMoKSAlPiUgDQogIGFkZE1hcmtlcnMofmVuZF9sb25naXR1ZGUsfmVuZF9sYXRpdHVkZSxpY29uID0gaWNvbl9lbmQsbGFiZWw9fnRyaXBfaWQpICU+JQ0KICBhZGRDaXJjbGVzKGxuZyA9IC05My41MDUwOCwgbGF0ID0gIDQ0Ljc1MzAxOSxyYWRpdXMgPSBsaXN0X3JhZGl1cywNCiAgICAgICAgICAgICBmaWxsQ29sb3IgPSAnbm9uZScsbGFiZWwgPWxpc3RfbGFiZWwpJT4lDQogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJE9wZW5TdHJlZXRNYXApDQoNCmBgYA0K